package com.ruoyi.product.service.impl;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.utils.DateUtils;
        import com.ruoyi.common.core.utils.uuid.IdUtils;
        import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.product.mapper.MallProductRuleInfoMapper;
import com.ruoyi.product.model.ProductRuleAttrModel;
import com.ruoyi.product.service.IMallProductRuleAttrInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.ruoyi.product.domain.MallProductRuleInfo;
import com.ruoyi.product.service.IMallProductRuleInfoService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 商品规格Service业务层处理
 *
 * @author ruoyi
 * @date 2025-07-23
 */
@Service
public class MallProductRuleInfoServiceImpl implements IMallProductRuleInfoService
{
    @Autowired
    private MallProductRuleInfoMapper mallProductRuleInfoMapper;

    @Autowired
    private IMallProductRuleAttrInfoService iMallProductRuleAttrInfoService;

    /**
     * 查询商品规格
     *
     * @param id 商品规格主键
     * @return 商品规格
     */
    @Override
    public MallProductRuleInfo selectMallProductRuleInfoById(String id)
    {
        return mallProductRuleInfoMapper.selectMallProductRuleInfoById(id);
    }

    /**
     * 查询商品规格列表
     *
     * @param mallProductRuleInfo 商品规格
     * @return 商品规格
     */
    @Override
    public List<MallProductRuleInfo> selectMallProductRuleInfoList(MallProductRuleInfo mallProductRuleInfo)
    {
        return mallProductRuleInfoMapper.selectMallProductRuleInfoList(mallProductRuleInfo);
    }

    /**
     * 新增商品规格
     *
     * @param mallProductRuleInfo 商品规格
     * @return 结果
     */
    //事务保底
    @Transactional
    @Override
    public int insertMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo)
    {
        mallProductRuleInfo.setId(IdUtils.simpleUUID());
        mallProductRuleInfo.setCreateBy(SecurityContextHolder.getUserId().toString());
        mallProductRuleInfo.setCreateTime(DateUtils.getNowDate());
        //获取规格属性
        /*
            ruleAttr = "[{\"ruleType\":\"内存\",\"ruleAttrList\":[\"32G\",\"64G\"]},
                         {\"ruleType\":\"品牌\",\"ruleAttrList\":[\"苹果\",\"华为\"]}]"
         */
        String ruleAttr = mallProductRuleInfo.getRuleAttr();
        //将列表转换为自己创的那个实体类格式
        List<ProductRuleAttrModel> ruleAttrModelList = JSONObject.parseArray(ruleAttr, ProductRuleAttrModel.class);
        //将规格id赋值给ProductRuleAttrModel实体类中的ruleId
        String ruleId = mallProductRuleInfo.getId();
        ruleAttrModelList.forEach(ruleAttrModel->ruleAttrModel.setRuleId(ruleId));
        int i = mallProductRuleInfoMapper.insertMallProductRuleInfo(mallProductRuleInfo);
        //将存储规格的数据集合传入到规格属性的业务层
        iMallProductRuleAttrInfoService.batchInsert(ruleAttrModelList);
        return i;
    }

    /**
     * 修改商品规格
     *
     * @param mallProductRuleInfo 商品规格
     * @return 结果
     */
    @Transactional
    @Override
    public int updateMallProductRuleInfo(MallProductRuleInfo mallProductRuleInfo)
    {
        //设置修改人
        mallProductRuleInfo.setUpdateBy(SecurityContextHolder.getUserId().toString());
        //设置修改时间
        mallProductRuleInfo.setUpdateTime(DateUtils.getNowDate());
        //这是ruleId
        String ruleId = mallProductRuleInfo.getId();
        //mallProductRuleInfo中的id就相当于参数信息表的ruleId,所以咱们直接用就行
        //调用iMallProductRUleAttrInfoService方法进行删除参数详情
        iMallProductRuleAttrInfoService.deleteMallProductRuleAttrInfoByRuleId(ruleId);
        //之后在进行参数详情表的内容添加 添加需要用到的就是之前新创建的model实体类
        List<ProductRuleAttrModel> ruleAttr = JSONObject.parseArray(mallProductRuleInfo.getRuleAttr(), ProductRuleAttrModel.class);
        //ruleAttr里面就是最新的参数详情数据，咱接下来就和之前批量添加一样给他们添加进去
        ruleAttr.forEach(ruleAttrModel->ruleAttrModel.setRuleId(ruleId));
        //批量添加准备就绪,接下来进行批量添加
        iMallProductRuleAttrInfoService.batchInsert(ruleAttr);
        //删除完成之后咱就可以开始进行修改参数类型表
        return mallProductRuleInfoMapper.updateMallProductRuleInfo(mallProductRuleInfo);
    }

    /**
     * 批量删除商品规格
     *
     * @param ids 需要删除的商品规格主键
     * @return 结果
     */
    @Override
    public int deleteMallProductRuleInfoByIds(String[] ids)
    {
        //删除不能仅仅删除参数类型表的数据，还要删除参数详情表的数据
        //这是删除详情
        iMallProductRuleAttrInfoService.deleteMallProductRuleAttrInfoByRuleIds(ids);
        //这是删除类型
        return mallProductRuleInfoMapper.deleteMallProductRuleInfoByIds(ids);
    }

    /**
     * 删除商品规格信息
     *
     * @param id 商品规格主键
     * @return 结果
     */
    @Override
    public int deleteMallProductRuleInfoById(String id)
    {
        return mallProductRuleInfoMapper.deleteMallProductRuleInfoById(id);
    }
}
